# -*- coding:utf-8 -*-

from __future__ import unicode_literals

from datetime import date

from flask import render_template, request, redirect, url_for, session, flash

from login_manager import login_required
from modelos import Professor, Disciplina, Aluno, AlunoDisciplina, Aula, AlunoAula

from __init__ import app

#cadastrar uma aula
@app.route("/form_add_aula/<int:id>", methods=['GET', 'POST'])
@login_required
def form_add_aula(id):
 
    alunos_ids = []

    try:
        aula_id = request.args['aula_id']

        aula = Aula.get(Aula.id == aula_id)
        aula_data = aula.data

        alunos_aula = AlunoAula.select().where(AlunoAula.aula == aula)

        for a in alunos_aula:
            alunos_ids.append(a.aluno.id)

    except:
        aula_id = False
        from datetime import datetime
        agora = datetime.now()
        aula_data = '%s/%s' % (agora.day, agora.month)

    p = Professor.get(Professor.id == session["user_id"])

    disciplina = Disciplina.get(Disciplina.id == id, Disciplina.professor == p)

    vinculados_alunos = AlunoDisciplina.select().where(AlunoDisciplina.disciplina == disciplina)

    lista = []
    for a in vinculados_alunos:
        chamada = {
            'id': a.aluno.id,
            'nome': a.aluno.nome,
            'checked': 'checked' if a.aluno.id in alunos_ids else ''
        }
        lista.append(chamada)

    lista = sorted(lista, key=lambda k: k['nome'])

    return render_template("form_add_aula.html",
        lista = lista,
        disciplina = disciplina,
        aula_id = request.args.get('aula_id', '0'),
        aula_data = aula_data
    )

#salvar os dados de uma aula
@app.route("/form_add_aula_salva/<int:id>", methods=['GET', 'POST'])
@login_required
def form_add_aula_salva(id):

    data = request.form['data']

    aula_id = request.args.get('aula_id', '0')

    if not data:
        flash('Data não informada', category='erro')
        return redirect(url_for("form_add_aula", id=id) + "?aula_id=%s" % aula_id)

    try:
        partes = data.split("/")
        # Monta a data, seja ela nova ou editada.
        d = date(day=int(partes[0]), month=int(partes[1]), year=1000)

    except:
        # Caso não consiga montar a data, ou seja, inválida.
        flash('Data Inválida, insira seguindo o formato dd/mm', category='erro')
        return redirect(url_for("form_add_aula", id=id) + "?aula_id=%s" % aula_id)

    p = Professor.get(Professor.id == session["user_id"])

    disciplina = Disciplina.get(Disciplina.id == id, Disciplina.professor == p)

    try:
        aula_obj = Aula.get(Aula.data == data, Aula.disciplina == disciplina)
    except:
        aula_obj = False

    if aula_obj:
        pass

    else:
        aula_obj = Aula.create(data=data, disciplina=disciplina)

    ids_atuais = request.form.getlist("alunos_group[]")

    for a in AlunoAula.select().where(AlunoAula.disciplina == disciplina, AlunoAula.aula == aula_obj):

        a.delete_instance()

    for id_aux in ids_atuais:

        aluno = Aluno.get(Aluno.id == id_aux)

        AlunoAula.create(aluno=aluno, disciplina=disciplina, aula=aula_obj)

    return redirect(url_for("ver_disciplina", id=id))

#excluir aula
@app.route("/excluir_aula/<int:aula_id>/disciplina_id/<disciplina_id>")
@login_required
def excluir_aula(aula_id, disciplina_id):

    aula_obj = Aula.get(Aula.id == aula_id)

    for aa in AlunoAula.select().where(AlunoAula.aula == aula_obj):
        aa.delete_instance()

    aula_obj.delete_instance()

    return redirect(url_for("ver_disciplina", id=disciplina_id))